package cn.learn.designpattern.command;

/*
    假设有一个快餐店，而我是该餐厅的点餐服务员，那么我一天的工作应该是这样的：当某位
客人点餐或者打来订餐电话后，我会把他的需求都写在清单上，然后交给厨房，客人不用关心是
哪些厨师帮他炒菜。我们餐厅还可以满足客人需要的定时服务，比如客人可能当前正在回家的路
上，要求 1个小时后才开始炒他的菜，只要订单还在，厨师就不会忘记。客人也可以很方便地打
电话来撤销订单。另外如果有太多的客人点餐，厨房可以按照订单的顺序排队炒菜。
这些记录着订餐信息的清单，便是命令模式中的命令对象。

适用场景：
    命令模式最常见的应用场景是：有时候需要向某些对象发送请求，但是并不知道请求的接收
者是谁，也不知道被请求的操作是什么。此时希望用一种松耦合的方式来设计程序，使得请求发送者和请求接收者能够消除彼此之间的耦合关系。

    拿订餐来说，客人需要向厨师发送请求，但是完全不知道这些厨师的名字和联系方式，也不
知道厨师炒菜的方式和步骤。 命令模式把客人订餐的请求封装成 command 对象，也就是订餐中的
订单对象。这个对象可以在程序中被四处传递，就像订单可以从服务员手中传到厨师的手中。这
样一来，客人不需要知道厨师的名字，从而解开了请求调用者和请求接收者之间的耦合关系。
*/

/**
 * 命令模式
 * https://blog.csdn.net/daidaineteasy/article/details/103863868
 *
 * @author huangyezhan
 * @date 2019年02月24日12:43
 */
public interface Command {

    /**
     * 执行命令
     */
    void execute();

}
